﻿// Copyright 2013 Ronald Schlenker, www.technewlogic.de.
// 
// This file is part of Byond.
// 
// Byond is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
// 
// Byond is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Byond.  If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Xml.Linq;

namespace Byond
{
	static class XmlExtensions
	{
		public static XElement GetElement(this XElement me, string name)
		{
			var element = me.Element(name);
			if (element != null)
				return element;

			throw new Exception(
				"Could not get '" + name + "' element of parent '" + me.Name + "'");
		}

		public static XAttribute GetAttribute(this XElement me, string name)
		{
			var attribute = me.Attribute(name);
			if (attribute != null)
				return attribute;

			throw new Exception(
				"Could not get '" + name + "' attribute of parent '" + me.Name + "'");
		}

		public static string GetElementValue(this XElement me, string name)
		{
			return GetElement(me, name).Value;
		}

		public static string GetElementValue(this XElement me, string name, string fallbackValue)
		{
			var element = me.Element(name);
			return element == null ? fallbackValue : element.Value;
		}

		public static string GetAttributeValue(this XElement me, string name)
		{
			return GetAttribute(me, name).Value;
		}

		public static string GetPath(this XElement me)
		{
			var path = me.Name.LocalName;
			return me.Parent != null
				? me.Parent.GetPath() + "." + path
				: path;
		}
	}
}
